{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Grid topology"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this tutorial we will have a more advanced take on the grid structure, specifically the topological information of the grids. \n",
    "We recommend reading the [grid](./grids.ipynb) tutorial before starting on this tutorial."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before tackling the topological information, we will re-use the basic grid we created in the previous grid structure tutorial:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import porepy as pp\n",
    "import inspect\n",
    "\n",
    "nx = np.array([3, 2])\n",
    "g = pp.CartGrid(nx)\n",
    "g.compute_geometry()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And for visualization purposes we also include the same plot as before:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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NIiIiEhj2KNBRESkIzhHg4iIiDRGF+docOiEiIiINIY9GkRERDrCyBAwlqixvwBA3mDh1O41tftyREREVF9GRoCRjiUaHDohIiIijWGPBhERkY4wVnPoxFhouFhqi4kGERGRjmiQoRMt49AJERERaQx7NIiIiHSEsSFgrEYXgbGi4WKpLVF7NOLi4jBy5Ei4uLhAIpFgz5491dafNGkSJBJJha1jx47KOhEREZXWKSws1PC7ISIi0jDDBti0TNREo6CgAF27dsWqVatqVX/FihWQSqXKLT09HXZ2dnj++edV6llZWanUk0qlMDMz08RbICIi0h6jBthECFk0QUFBCAoKqnV9a2trWFtbKx/v2bMHOTk5eO2111TqSSQSODk5NVicREREVD86PRl0w4YNGDJkCNzc3FTK8/Pz4ebmhpYtW+KZZ55BQkJCtccpKiqCTCZT2YiIiJ44OtijobOJhlQqxf/+9z9MnTpVpdzb2xsRERHYt28ftm7dCjMzM/Tu3RspKSlVHissLEzZW2JtbY1WrVppOnwiIqK6Y6KhPREREbCxscHo0aNVyv39/fHKK6+ga9eu6Nu3L3bs2IF27drh22+/rfJYoaGhyMvLU27p6ekajp6IiKhx0MnlrYIgYOPGjQgODoaJiUm1dQ0MDNCjR49qezRMTU1hamra0GESERE1LAOIsnJEHTrZoxEbG4srV65gypQpNdYVBAGJiYlwdnbWQmREREQapINDJ6L2aOTn5+PKlSvKx6mpqUhMTISdnR1cXV0RGhqKjIwM/PTTTyr7bdiwAT179kSnTp0qHHPBggXw9/eHp6cnZDIZVq5cicTERKxevVrj74eIiIhUiZpoxMfHY+DAgcrHISEhAICJEyciIiICUqkUaWlpKvvk5eUhMjISK1asqPSYubm5eOONN5CZmQlra2v4+PggLi4OTz31lObeCBERkTYYQb2hEzXuk1JfoiYaAwYMgCBUfYeXiIiICmXW1ta4f/9+lfssX74cy5cvb4jwiIiIniwiXd1THTo5R4OIiIh0g06uOiEiImqUOHRCREREGmMInfvm1rFwiYiIGjF152hUPS1SYzhHg4iIiDSGPRpERES6QqSLbqlDx8IlIiJqxHQw0eDQCREREWmMjuVFREREjZgO9mjoWLhERESNmLp3b1U0VCC1x6ETIiIi0hj2aBAREekK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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cell_id = np.arange(g.num_cells)\n",
    "pp.plot_grid(g, cell_value=cell_id, info='cfn', alpha=0.5, figsize=(15,12), plot_2d=True)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the rest of this tutorial, we will advice the user to sporadically have a look at this plot. \n",
    "All the face numbers, node numbers, etc. gathered further down are shown nicely in this figure. \n",
    "It can therefore be helpful as a visual guide. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Topological information"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition to storing coordinates of cells, faces and nodes, the grid object also keeps track of the relation between them. \n",
    "Specifically, we can access:\n",
    "1. The relation between cells and faces\n",
    "2. The relation between faces and nodes\n",
    "3. The direction of `face_normals`, as in which of the neighboring cells has the normal vector as outwards pointing.\n",
    "\n",
    "Note that there is no notion of edges for 3d grids. \n",
    "These are not usually needed for the type of numerical methods that are primarily of interest in `porepy`. \n",
    "The information can still be recovered from the face-node relations, see comments below.\n",
    "\n",
    "The topological information is stored in two attributes, `cell_faces` and `face_nodes`. \n",
    "The latter has the simplest interpretation, so we start out with that one:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<12x17 sparse matrix of type '<class 'numpy.bool_'>'\n",
       "\twith 34 stored elements in Compressed Sparse Column format>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.face_nodes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the information is stored as a scipy.sparse matrix. \n",
    "From the shape of the matrix, we conclude that the rows represent nodes, while the faces are stored in columns. \n",
    "We can get the nodes for the first face by brute force by writing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 4])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.face_nodes[:,0].nonzero()[0]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Similarly, we can also get the faces of a node, for example the sixth (counting from 0) node:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1,  5, 11, 12])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.face_nodes[5,:].nonzero()[1]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The map between cells and faces is stored in the same way, thus the faces of cell 0 are found by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0  1  8 11]\n"
     ]
    }
   ],
   "source": [
    "faces_of_cell_0 = g.cell_faces[:,0].nonzero()[0]\n",
    "print(faces_of_cell_0)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`cell_faces` also keeps track of the direction of the normal vector relative to the neighboring cells.\n",
    "This is done by storing data as $\\pm 1$, or zero if there is no connection between the cells (in contrast, `face_nodes` simply consist of `True` or `False`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.,  1., -1.,  1.])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.cell_faces[:,0].data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Compare this with the face normal vectors, which can either be gathered in an array or shown using `pp.plot_grid`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 1., 0., 0.],\n",
       "       [0., 0., 1., 1.]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.face_normals[:g.dim, faces_of_cell_0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\ist050\\onedrive - university of bergen\\documents\\github\\porepy\\src\\porepy\\viz\\plot_grid.py:196: UserWarning: Attempting to set identical low and high zlims makes transformation singular; automatically expanding.\n",
      "  ax.set_zlim3d(z)  # type: ignore[attr-defined]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pp.plot_grid(g, info='co', alpha=0.5, figsize=(10, 12))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As can be seen from both the normal vector array and the figure, we observe that positive data corresponds to the normal vector pointing out of the cell. \n",
    "This is a very useful feature, since it in effect means that the transpose of `g.cell_faces` is the discrete divergence operator for the grid.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can obtain the cells of a face in the same way as we obtained the faces of a node. \n",
    "However, we know that there will be either 1 or 2 cells adjacent to each face. \n",
    "It is thus feasible to create a dense representation of the cell-face relations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1,  0,  1,  2, -1,  3,  4,  5, -1, -1, -1,  0,  1,  2,  3,  4,\n",
       "         5],\n",
       "       [ 0,  1,  2, -1,  3,  4,  5, -1,  0,  1,  2,  3,  4,  5, -1, -1,\n",
       "        -1]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "g.cell_face_as_dense()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, each column represents the cells of a face, and a negative value signifies that the face is on the boundary, i.e., the face has only one neighboring cell. \n",
    "The cells are ordered so that the normal vector points from the cell in row 0 to that in row 1.\n",
    "\n",
    "Finally, we note that to get a cell-node relation, we can combine `cell_faces` and `face_nodes`. \n",
    "However, since `cell_faces` contains both positive and negative values, we need to take the absolute value of the data. This procedure is implemented in the method `cell_nodes()`, which returns a sparse matrix that can be handled in the usual way"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    def cell_nodes(self) -> sps.csc_matrix:\n",
      "        \"\"\"Obtain mapping between cells and nodes.\n",
      "\n",
      "        Returns:\n",
      "            An array with ``shape=(num_nodes, num_cells)`` representing the mapping from\n",
      "            cells to nodes spanning respective cell.\n",
      "\n",
      "            The value 1 indicates a connection between a cell and node column-wise.\n",
      "\n",
      "        \"\"\"\n",
      "        mat = (self.face_nodes * np.abs(self.cell_faces)) > 0\n",
      "        return mat\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0, 1, 4, 5])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(inspect.getsource(g.cell_nodes))\n",
    "g.cell_nodes()[:,0].nonzero()[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# What we have explored\n",
    "\n",
    "We have seen how to access various topological properties of grids in PorePy, such as the relation between cells, faces and nodes, as well as the direction of the face normal vectors."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
